package impresion;



import gestion.Albaran;
import gestion.Trabajo;
import gestion.TrabajoProducto;
import gestion.Factura;
import clientes.Cliente;
import productos.Producto;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.codec.Base64.InputStream;
import com.lowagie.text.pdf.codec.Base64.OutputStream;
import emailSW.MailUtils;
import empresa.DatosEmpresa;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.ListIterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Query;
/**
 *
 * @author rocio
 */
public class ImprimirFactura extends Imprimir {
    private javax.persistence.EntityManager lpdPUEntityManager;
    private boolean a;
    private Query q,q2,q3,q4;
    private List albaranes,trabajosProductos;
    private ListIterator it,it2;
    private Albaran albaran;
    private Trabajo trabajo;
    private Producto producto;
    private TrabajoProducto trabajoProducto;
    private float importe;
    private float total1,total2;
    private Factura factura;
    private String tit;
    /** Creates new form ImprimirFactura */
    public ImprimirFactura() {
        lpdPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("lpdPU").createEntityManager();

    }
    public String getTit(){
        tit="factura_".concat(String.valueOf(factura.getIDfactura())).concat("_cliente_").concat(String.valueOf(factura.getIDcliente())).concat("_fecha_").concat(factura.getFecha()).concat(".pdf");
        return tit;
    }
    public void setDescripcion() throws DocumentException, Exception{
        a = documento.add(new Paragraph("      Nº de Factura:  "+factura.getIDfactura()));//aki faltaria poner los datos de la empresa
        a=documento.add (Chunk.NEWLINE);
        a = documento.add(new Paragraph("      Fecha:  "+factura.getFecha()+"\n--------------------------------------------------------------------------------------------------------------------------------"));
        q2=lpdPUEntityManager.createQuery("SELECT d FROM DatosEmpresa d");
        DatosEmpresa datosEmpresa=(DatosEmpresa) q2.getSingleResult();


        q=lpdPUEntityManager.createQuery("SELECT c FROM Cliente c WHERE c.iDcliente="+factura.getIDcliente());
        //datos del cliente
        Cliente cliente=(Cliente) q.getSingleResult();
        a = documento.add(new Paragraph("Datos del cliente:\n        Nombre:   "+cliente.getNombre()+"          NIF:   "+cliente.getNif()+" - "+cliente.getLetraDNI()+"\n        Direccion:   "+cliente.getDireccion()+"\n        Codigo Postal:   "+cliente.getCp()+"         "+cliente.getLocalidad()+"      "+cliente.getProvincia()+"\n--------------------------------------------------------------------------------------------------------------------------------\n"));
        //datos de los albaranes
        q=lpdPUEntityManager.createQuery("SELECT a FROM Albaran a,AlbaranFactura af WHERE a.iDalbaran=af.albaranFacturaPK.iDalbaran AND af.albaranFacturaPK.iDfactura="+factura.getIDfactura());
        albaranes=q.getResultList();
        it=albaranes.listIterator();

        while(it.hasNext()){
            albaran=(Albaran) it.next();
            total2=0;
            q2=lpdPUEntityManager.createQuery("SELECT t FROM Trabajo t WHERE t.iDtrabajo="+albaran.getIDtrabajo());
            trabajo=    (Trabajo) q2.getSingleResult();
            a=documento.add(new Paragraph("Nº Albaran:   "+albaran.getIDalbaran()+"               Fecha:       "+albaran.getFecha()+"\n          Paciente:   "+trabajo.getPaciente()+"\n                    Cantidad          Concepto          Precio/Unidad          Importe\n"));
            q3=lpdPUEntityManager.createQuery("SELECT tp FROM TrabajoProducto tp WHERE tp.trabajoProductoPK.iDtrabajo="+trabajo.getIDtrabajo());
            trabajosProductos=q3.getResultList();
            it2=trabajosProductos.listIterator();
            while (it2.hasNext()){
                trabajoProducto=(TrabajoProducto) it2.next();
                q4=lpdPUEntityManager.createQuery("SELECT p FROM Producto p WHERE p.iDproducto="+trabajoProducto.getTrabajoProductoPK().getIDproducto());
                producto=(Producto) q4.getSingleResult();
                importe=producto.getPrecio()*trabajoProducto.getCantidad();
                total2=total2+importe;
                a=documento.add(new Paragraph("                      "+trabajoProducto.getCantidad()+"            "+producto.getConcepto()+"              "+producto.getPrecio()+"                 "+importe+"\n"));
            }
                                            //                    Cantidad          Concepto          Precio/Unidad          Importe\n"));
            a=documento.add(new Paragraph("                                                                                         Total albaran:   "+total2+"\n                                    *********************************************************************"));

        }
        total1=factura.getTotal()-(factura.getTotal()*factura.getDto())+(factura.getTotal()*factura.getIrpf());
        a=documento.add(new Paragraph("\n\n\n                                                                       TOTAL:     "+factura.getTotal()+"\n                                                                           IRPF:   "+factura.getIrpf()+"\n                                                                            Dto:  "+factura.getDto()));
        a=documento.add(new Paragraph("\n                                                                                               TOTAL:     "+total1));
  try{
        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + getTit());
    } catch (IOException ex) {
    Logger.getLogger(ImprimirFactura.class.getName()).log(Level.SEVERE, null, ex);
    }
    }
    public void setFactura(Factura factura)  {
        this.factura=factura;
    }

    @Override
    protected void copiar() {
        File src=new  File(tit);
        File dst=new File("C:\\Users\\Juan Antonio Tirado\\Documents\\Aptana Studio\\lpd\\pdf\\".concat(tit));
        FileInputStream in = null;
        FileOutputStream  out = null;
        try {
            in = new FileInputStream(src);
            out = new FileOutputStream(dst);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ImprimirFactura.class.getName()).log(Level.SEVERE, null, ex);
        }



        int c;

        byte[] buf = new byte[1024];
        int len;
        try {
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
        } catch (IOException ex) {
            Logger.getLogger(ImprimirFactura.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            in.close();
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(ImprimirFactura.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

        


}